public class demo1 {
    class Solution {
        public int calculateMinimumHP(int[][] dungeon) {
            int m=dungeon.length;
            int n=dungeon[0].length;
            int[][]dp=new int[m+1][n+1];
            for(int i=0;i<=n;i++)dp[m][i]=Integer.MAX_VALUE;
            for(int j=0;j<=m;j++)dp[j][n]=Integer.MAX_VALUE;
            dp[m][n-1]=dp[m-1][n]=1;
            for(int i=m-1;i>=0;i--){
                for(int j=n-1;j>=0;j--){
                    dp[i][j]=Math.min(dp[i+1][j],dp[i][j+1])-
                            dungeon[i][j];
                    // 血值至少为1
                    dp[i][j]=Math.max(1,dp[i][j]);
                }
            }
            return dp[0][0];
        }
    }
}
